#include<bits/stdc++.h>
#define int long long
using namespace std;
const int B=1024,inf=-1e10;
int n,L,a[200005],b[200005],dp[2][1030],ans=0;
bool v[1030][1030];
struct ok{
    int x,y;
};
vector<ok> e;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
signed main(){
    freopen("lock.in","r",stdin);
    freopen("lock.out","w",stdout);
    n=read(),L=read();
    for(int i=1;i<=n;i++) a[i]=read(),b[i]=read();
    if(n<=18){
        for(int i=0;i<(1<<n);i++){
            int d1=0,d2=0;
            for(int j=1;j<=n;j++) if(i&(1<<(j-1))) d1^=a[j],d2^=b[j];
            if(d1<=L) ans=max(ans,d2);
        }
    }
    else{
        if(n<=2000){
            v[0][0]=1;
            e.push_back((ok){0,0});
            L=min(L,(int)1023);
            for(int i=1;i<=n;i++){
                int sz=(int)e.size();
                if(sz==1048576) continue;
                for(int j=0;j<sz;j++){
                    if(!v[e[j].x^a[i]][e[j].y^b[i]]){
                        v[e[j].x^a[i]][e[j].y^b[i]]=1;
                        if((e[j].x^a[i])<=L) ans=max(ans,e[j].y^b[i]);
                        e.push_back((ok){e[j].x^a[i],e[j].y^b[i]});
                    }
                }
                if(ans==1023) break;
            }
        }
        else{
            for(int i=1;i<B;i++) dp[0][i]=inf;
            for(int i=1;i<=n;i++){
                int t=i&1;
                for(int j=0;j<B;j++) dp[t][j]=inf;
                for(int j=0;j<B;j++){
                    dp[t][j]=max(dp[t][j],dp[t^1][j^a[i]]^b[i]);
                    dp[t][j]=max(dp[t][j],dp[t^1][j]);
                }
            }
            L=min(L,(int)1023);
            for(int i=0;i<=L;i++) ans=max(ans,dp[n&1][i]);
        }
    }
    cout<<ans;
    return 0;
}